import axios from "axios";
import { message } from "ant-design-vue";
import { userStore } from "@/store/modules/user.js";
import router from "../router";

const { VITE_APP_PROXY_TYPE } = import.meta.env;

const service = axios.create({
  baseURL: VITE_APP_PROXY_TYPE,
  timeout: 50000,
});

// 请求拦截器
service.interceptors.request.use(
  (config) => {
    const user = userStore();
    const token = user.token;
    if (token) {
      config.headers.Authorization = `Bearer ${token}`;
    }
    return config;
  },
  (error) => {
    message.error(`Request error: ${error}`);
    return Promise.reject(error);
  }
);

// 响应拦截器
service.interceptors.response.use(
  (response) => {
    return response.data;
  },
  async (error) => {
    const originalRequest = error.config;
    const user = userStore();

    // 处理 401 错误
    if (error.response.status === 401 && !originalRequest._retry) {
      originalRequest._retry = true;

      try {
        const refreshToken = user.refresh;

        // 如果没有刷新 token，直接跳转到登录页面
        if (!refreshToken) {
          message.error("登录信息已过期，请重新登录");
          user.clearUserData(); // 清除用户数据
          return router.push("/login");
        }

        // 尝试刷新 token
        const res = await axios.post(`${VITE_APP_PROXY_TYPE}/token/refresh/`, {
          refresh: refreshToken,
        });

        // 更新用户的 token
        user.token = res.data.access;
        originalRequest.headers.Authorization = `Bearer ${user.token}`;

        // 重新发起原始请求
        return service(originalRequest);
      } catch (refreshError) {
        // 刷新 token 失败，跳转到登录页面
        message.error("登录已过期，请重新登录");
        user.clearUserData();
        return router.push("/login");
      }
    }

    // 其他错误
    return Promise.reject(error);
  }
);

export default service;
